在编码阶段进行XSS漏洞防护的基本措施有哪些
在编码阶段进行XSS漏洞防护的基本措施:
输入验证:从安全开发的角度讲,应当不信任用户的任何输入。因此,在客户端和服务器端均应对用户输入进行验证,包括输入数据类型、数据格式或数据长度是否符合预期。由于恶意用户可以利用Burp Suite、FireBug等工具拦截修改HTTP/HTTPS请求和响应来绕过客户端验证,因此服务器端输入验证必不可少且至关重要,在服务器端应当设置一个尽可能严密的XSSFilter来过滤和净化用户输入。
采用开发框架自带的标签输出方式:禁止采用不安全的输出方式,应该采用标签形式输出,采用标签方式输出时,系统默认会自动对数据做HTML转换。
对输出数据进行净化:应对输出数据进行过滤和转义,将敏感字符转换为其对应的实体字符来清理HTML特殊字符。例如,将HTML标签最关键的字符<、>、&编码为<、>、&。
将Cookie设置为HttpOnly:攻击Web应用大多数是为了获得合法用户的Cookie信息,所以应该减少将大量的数据存储在Cookie中,在任何可能的时候使用HttpOnly Cookie。HttpOnly Cookie是某些浏览器所支持的一种防御机制,应用程序能使用它来防止XSS攻击。当一个Cookie以这种方式标记时,支持它的浏览器将阻止客户端JavaScript直接访问Cookie。虽然浏览器仍然会在请求的HTTP消息头中提交这个Cookie,但它不会出现在document.cookie返回的字符串中。
谨慎使用DOM操作基于DOM的XSS是利用DOM操作实现的针对客户端的XSS注入,由于被处理的数据不在服务器控制范围内,因此不能通过在服务器端部署防御策略来解决,这就要求开发人员要谨慎、合理地使用DOM操作,尽可能避免使用DOM进行客户端重定向、文档操作或调用本地数据等敏感操作,转而将这些行为放到服务器端使用动态页面的方式来实现。
使用检测工具:还可以使用XSS漏洞自动化检测工具进行检测,如XSSDetect等。